//package mn.idax.exchange.otc.task;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.dangdang.ddframe.job.api.ShardingContext;
//import com.dangdang.ddframe.job.api.simple.SimpleJob;
//import com.dangdang.elasticjob.lite.annotation.ElasticSimpleJob;
//import com.google.common.collect.Lists;
//import lombok.SneakyThrows;
//import mn.idax.exchange.otc.constant.CommonConstant;
//import mn.idax.exchange.otc.domain.adprice.AdPriceSystemDTO;
//import mn.idax.exchange.otc.exception.IdaxException;
//import mn.idax.exchange.otc.service.impl.MemoryService;
//import mn.idax.exchange.otc.util.HttpClientUtil;
//import mn.idax.exchange.otc.util.LogUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.ws.rs.HttpMethod;
//import java.math.BigDecimal;
//import java.text.MessageFormat;
//import java.util.List;
//
///**
// * @Author: jension
// * @Date: 2019/10/16 18:08
// */
//@ElasticSimpleJob(cron = "0 */1 * * * ?")
//@Component
//public class OtcAdPriceJob implements SimpleJob {
//
//    private static final String[] types = new String[]{"BUY", "SELL"};
//
//    @Autowired
//    StringRedisTemplate stringRedisTemplate;
//
//    @SneakyThrows
//    @Override
//    public void execute(ShardingContext shardingContext) {
//        LogUtils.info(this.getClass(), "OtcAdPriceJob execute run start." + System.currentTimeMillis());
//        List<AdPriceSystemDTO> systemList = Lists.newArrayList();
//        // 获取配置
//        systemList.add(JSON.parseObject(MemoryService.SYSTEMSETTINGMAP.get(CommonConstant.OTC_BIAN_SYSTEM).toString(), AdPriceSystemDTO.class));
//        systemList.add(JSON.parseObject(MemoryService.SYSTEMSETTINGMAP.get(CommonConstant.OTC_HUOBI_SYSTEM).toString(), AdPriceSystemDTO.class));
//
//        for (String type : types) {
//            List<BigDecimal> list = Lists.newArrayList();
//
//            for (AdPriceSystemDTO adPriceSystemDTO : systemList) {
//                // 请求接口
//                if (adPriceSystemDTO.getMethod().equalsIgnoreCase(HttpMethod.GET)) {
//                    // 格式化参数
//                    String url = MessageFormat.format(adPriceSystemDTO.getUrl(), type);
//                    list.addAll(analyticResponse(HttpClientUtil.doGet(url), adPriceSystemDTO.getSource()));
//                } else {
//                    String param = adPriceSystemDTO.getParam().replace("{0}", type);
//                    list.addAll(analyticResponse(HttpClientUtil.doPost(adPriceSystemDTO.getUrl(), param), adPriceSystemDTO.getSource()));
//                }
//            }
//
//            // 拟合价格
//            BigDecimal price = BigDecimal.ZERO;
//            for (BigDecimal bigDecimal : list) {
//                price = price.add(bigDecimal);
//            }
//            // 存储
//            if (list.isEmpty()) {
//                stringRedisTemplate.opsForValue().set("OTCAD_PRICE:" + type, BigDecimal.ZERO.toPlainString());
//            } else {
//                price = price.divide(new BigDecimal(list.size()), 4, BigDecimal.ROUND_DOWN);
//                if (stringRedisTemplate.hasKey("OTCAD_PRICE:" + type)) {
//                    Double lastPrice = Double.valueOf(stringRedisTemplate.opsForValue().get("OTCAD_PRICE:" + type));
//                    double v = lastPrice - price.doubleValue();
//                    if (lastPrice > 0 && (v > 2 || v < -2)) {
//                        return;
//                    }
//                }
//                stringRedisTemplate.opsForValue().set("OTCAD_PRICE:" + type, price.toPlainString());
//            }
//        }
//        LogUtils.info(this.getClass(), "OtcAdPriceJob execute run end." + System.currentTimeMillis());
//    }
//
//
//    public List<BigDecimal> analyticResponse(String response, String source) {
//        if (source.equalsIgnoreCase("bian")) {
//            return bianAnalytic(response);
//        } else if (source.equalsIgnoreCase("huobi")) {
//            return huobiAnalytic(response);
//        }
//        throw new IdaxException("无效的平台");
//    }
//
//    public List<BigDecimal> bianAnalytic(String response) {
//        List<BigDecimal> list = Lists.newArrayList();
//        if (StringUtils.isEmpty(response)) {
//            return list;
//        }
//        JSONObject jsonObject = JSON.parseObject(response);
//        if (!jsonObject.getInteger("code").equals(0)) {
//            return list;
//        }
//
//        JSONArray jsonArray = jsonObject.getJSONArray("data");
//        for (int i = 0; i < jsonArray.size(); i++) {
//            list.add(new BigDecimal(jsonArray.getJSONObject(i).getJSONObject("advDetail").getString("price")));
//        }
//        return list;
//    }
//
//
//    public List<BigDecimal> huobiAnalytic(String response) {
//        List<BigDecimal> list = Lists.newArrayList();
//        if (StringUtils.isEmpty(response)) {
//            return list;
//        }
//        JSONObject jsonObject = JSON.parseObject(response);
//        if (!jsonObject.getInteger("code").equals(200)) {
//            return list;
//        }
//
//        JSONArray jsonArray = jsonObject.getJSONArray("data");
//        for (int i = 0; i < jsonArray.size(); i++) {
//            list.add(new BigDecimal(jsonArray.getJSONObject(i).getString("price")));
//        }
//        return list;
//    }
//
//    public static void main(String[] args) {
//        System.out.println(BigDecimal.ZERO.divide(new BigDecimal(0), 4, BigDecimal.ROUND_DOWN));
//    }
//
//
//}
